//
// ServerSocket.cpp
//
// $Id: //poco/1.4/Net/src/ServerSocket.cpp#2 $
//
// Library: Net
// Package: Sockets
// Module:  ServerSocket
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//


#include "Poco/Net/ServerSocket.h"
#include "Poco/Exception.h"


using Poco::InvalidArgumentException;


namespace Poco {
namespace Net {


ServerSocket::ServerSocket()
{
}


ServerSocket::ServerSocket(const Socket& socket): Socket(socket)
{
}


ServerSocket::ServerSocket(const SocketAddress& address, int backlog)
{
	Socket::bind(address, true);
	Socket::listen(backlog);
}


ServerSocket::ServerSocket(Poco::UInt16 port, int backlog)
{
	IPAddress wildcardAddr;
	SocketAddress address(wildcardAddr, port);
	Socket::bind(address, true);
	Socket::listen(backlog);
}


ServerSocket::~ServerSocket()
{
}


ServerSocket& ServerSocket::operator = (const Socket& socket)
{
	Socket::operator = (socket);
	return *this;
}


void ServerSocket::bind(const SocketAddress& address, bool reuseAddress)
{
	Socket::bind(address, reuseAddress);
}


void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress)
{
	IPAddress wildcardAddr;
	SocketAddress address(wildcardAddr, port);
	Socket::bind(address, reuseAddress);
}


void ServerSocket::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
{
	Socket::bind6(address, reuseAddress, ipV6Only);
}


void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only)
{
	IPAddress wildcardAddr(IPAddress::IPv6);
	SocketAddress address(wildcardAddr, port);
	Socket::bind6(address, reuseAddress, ipV6Only);
}

	
void ServerSocket::listen(int backlog)
{
	Socket::listen(backlog);
}


int ServerSocket::acceptConnection()
{
	SocketAddress clientAddr;
	return Socket::acceptConnection(clientAddr);
}


} } // namespace Poco::Net
